package net.suplementos.dao;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;

import net.suplementos.exception.DAOException;
import net.suplementos.pojo.Marca;

public class MarcaDAO extends JPAAbstractDAO<Marca, Integer> {

	public MarcaDAO(EntityManager manager) throws DAOException {
	    super(manager);
	}

	protected Class<Marca> doGetClass() {
		return Marca.class;
	}
	
	public Marca getPorTitulo(String titulo) throws DAOException {
		String consulta = "select m from Marca m where m.titulo = ?";

		List<Marca> marcas = consultar(consulta, titulo);

		if (marcas == null || marcas.isEmpty()) {
			return null;
		}

		return marcas.get(0);
	}
	
	public List<Marca> listarTodasAtivas() throws DAOException {
		String consulta = "select m from Marca m where m.ativo = true";

		return consultar(consulta);
	}
	
	public List<Marca> consultar(Marca marca) throws DAOException {
       	StringBuilder hql = new StringBuilder("select m from Marca m where 1 = 1 ");
       	List<Object> parametros = new ArrayList<Object>();

    	if (marca.getId() != null) {
    		hql.append("and m.id = ?");
    		parametros.add(marca.getId());
    	}
    	if (marca.getAtivo() != null) {
    		hql.append("and m.ativo = ?");
    		parametros.add(marca.getAtivo());
    	}
    	if (marca.getDescricao() != null && !marca.getDescricao().trim().equals("")) {
    		hql.append("and m.descricao like ?");
    		parametros.add("%" + marca.getDescricao() + "%");
    	}
    	if (marca.getEmail() != null && !marca.getEmail().trim().equals("")) {
    		hql.append("and m.email = ?");
    		parametros.add(marca.getEmail());
    	}
    	if (marca.getSite() != null && !marca.getSite().trim().equals("")) {
    		hql.append("and m.site = ?");
    		parametros.add(marca.getSite());
    	}
    	if (marca.getTitulo() != null && !marca.getTitulo().trim().equals("")) {
    		hql.append("and m.titulo like ?");
    		parametros.add("%" + marca.getTitulo() + "%");
    	}

    	return consultar(hql.toString(), parametros.toArray(new Object[parametros.size()]));
	}
}
